// #include "WebServer.h"
#include <Arduino.h>
#include "WiFi.h"
#include "htmlpage.h"    //存储网页
#include "Preferences.h" //往flash里面存入数据
#include <ESPAsyncWebServer.h>


#define SEIRAL_DEBUG(data) Serial.println(data)
AsyncWebServer server(80);    // 创建服务器对象监听80端口
AsyncWebSocket ws("/ws");

// WebSocket事件处理
void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type,
             void *arg, uint8_t *data, size_t len) {
  if(type == WS_EVT_CONNECT) {
    uint8_t id = client->id();
    Serial.printf("客户端 #%u 已连接\n", id);
    ws.text(id,"--客户端:已经连接");
  } else if(type == WS_EVT_DISCONNECT) {
    Serial.printf("客户端 #%u 已断开\n", client->id());
    ws.cleanupClients();// 清理断开的客户端
  }
}

void setup()
{
  Serial.begin(115200);
  WiFi.softAP("ESP32_WEBS");
  // WiFi.setTxPower(WIFI_POWER_19_5dBm);  // 设置为最大功率
  // 等待AP模式启动
  delay(1000);

  // 配置WebSocket
  ws.onEvent(onEvent);
  server.addHandler(&ws);

  // 提供主页面
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  server.begin(); // 开启服务
}
unsigned long previousMillis = 0;
long i = 0;
void loop()
{
  // unsigned long currentMillis = millis();
  // if (currentMillis - previousMillis >= 5) {
  //   previousMillis = millis();
  //   i++;
  //   ws.textAll(String(i).c_str());   // 发送给所有客户端
  // }

  if (Serial.available())
  {
    String data = Serial.readStringUntil('\n'); // 去除换行符
    SEIRAL_DEBUG(data);                       // 测试
    ws.textAll(data.c_str());
  }
}
